1. Field of the Invention
This invention relates to the field of computer networks, and, more specifically, to a method and apparatus for distributing and synchronizing objects across a network.
Portions of the disclosure of this patent document contain material that is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure as it appears in the Patent and Trademark Office file or records, but otherwise reserves all copyright rights whatsoever. Apple, Macintosh, AppleTalk, AppleScript, and all Apple-based trademarks and logos are trademarks or registered trademarks of Apple Computer, Inc. in the United States and other countries.
2. Background Art
In a computer, applications, information, and processes may be controlled and executed by objects. Such objects may contain information (referred to as data) and may contain methods and applications (referred to as behavior) that can manipulate the data. In a computer network environment, multiple computers are linked together and one computer on a network may contain the object (and its associated data and behavior) that another computer desires to access or utilize. To provide the ability for multiple computers on a network to access and utilize an object located on a particular remote computer, a local computer may be provided with a “proxy object” that sends messages to and receives messages from the desired object (referred to as a remote object); however, when numerous computers are linked together (each with their own proxy object), the number of messages generated and transmitted across the network create excessive network traffic such that many applications cannot execute properly. These problems can be better understood by reviewing object oriented programming and networks and how they work.
Object-Oriented Programming
Object-oriented programming is a method of creating computer programs by combining certain fundamental building blocks, and creating relationships among and between the building blocks. The building blocks in object-oriented programming systems are called “objects.” An object is a programming unit that groups together a data structure (one or more instance variables) and the behavior/operations (methods) that can use or affect that data. Thus, an object consists of data and one or more operations or procedures that can be performed on that data. The joining of data and operations into a unitary building block is called “encapsulation.”
An object can be instructed to perform one of its methods when it receives a “message.” A message is a command or instruction sent to the object to execute a certain method. A message consists of a method selection (e.g., method name) and a plurality of arguments. A message tells the receiving object what operations to perform.
One advantage of object-oriented programming is the way in which methods are invoked. When a message is sent to an object, it is not necessary for the message to instruct the object how to perform a certain method. It is only necessary to request that the object execute the method. This greatly simplifies program development.
Object-oriented programming languages are predominantly based on a “class” scheme. The class-based object-oriented programming scheme is generally described in Lieberman, “Using Prototypical Objects to Implement Shared Behavior in Object-Oriented Systems,” OOPSLA 86 Proceedings, September 1986, pp. 214-223.
An object is a generic term that is used in the object-oriented programming environment to refer to a module that contains related code and variables. A software application can be written using an object-oriented programming language whereby the program's functionality is implemented using objects.
Software applications can take advantage of a distributed computing capability referred to as distributed objects. Using distributed objects, a first object (a client object), can send a message to a second object (a server object or remote object) regardless of the physical location of either object. That is, the client and server objects can reside on different machines.
The distributed object technology uses a name server, and a local proxy to allow a client-object to communicate with a server object. A name server is used to register the server object. A client accesses the name server to look up the name of the server object. Using the name information, the client object directs a message to the server object.
Instead of going directly from the client to the server, the message is actually received by a proxy object that resides on the same machine as the client object. The proxy object uses specialized methods to repackage a method invocation request and sends it to the remote object. Thus, the proxy object forwards the message to the server object on the server object's machine. A response generated by the server object is forwarded to the client object via the proxy object. The client object need not know the location of the server object. As far as the client object is concerned, the proxy object is the server object. However, the proxy object is only a vehicle for forwarding the message to the server object via the network. The details of the network communication is therefore hidden from the client object.
Using distributed objects, every message sent to the proxy has to cross a network, thereby increasing network traffic. Due to the increase in network traffic, developers are forced to design applications taking the increased traffic into account. For example, a developer may desire some objects to be stored locally because increased network traffic would significantly impact the execution speed of an application if the object were stored remotely with messages transmitted through a proxy object. In some situations, an application may not work at all if an object is stored remotely (e.g., thousands of messages transmitted across a network may cause an application to execute too slowly or cause errors to occur if the application is time sensitive). It is desirable for programmers and developers to implement an application without considering the impact of network traffic or the affect a distributed object environment will have on the application.
Networks
In modern computing environments, it is commonplace to employ multiple computers or workstations linked together in a network to communicate between, and share data with, network users. A network also may include resources, such as printers, modems, file servers, etc., and may also include services, such as electronic mail (email). A network may include multiple computers, resources, and services or may consist of one computer/user.
A network can be a small system (a local area network or “LAN”), or several separate networks can be connected together to form a larger network (a wide area network or “WAN”). Other types of networks include the internet, tel-com networks, the World Wide Web, intranets, extranets, wireless networks, and other networks over which electronic, digital, and/or analog data may be communicated.
The Internet is a worldwide network of interconnected computers. An Internet client accesses a computer on the network via an Internet provider. An Internet provider is an organization that provides a client (e.g., an individual or other organization) with access to the Internet (via analog telephone line or Integrated Services Digital Network line, for example). A client can, for example, read information from, download a file from or send an electronic mail message to another computer/client using the Internet. Thus, the internet consists of multiple networks connected to each other into one large network. Networks commonly utilize a server that provides information such as email or web pages to a requesting user (referred to as a client) that is requesting the information. A server may be a designated computer or may exist on an end user's computer. Additionally, a server may be viewed as any computer or processor on a network that provides and processes information. Further, multiple servers may coexist on the same network.
An addressing scheme is employed to identify Internet resources and 25 networks from each other. This addressing scheme is called Uniform Resource Locator (URL). A URL may contain the application protocol to use when accessing the server (e.g., HTTP (hypertext transfer protocol)), the Internet domain name (also referred to as the server host name) of the site on which the server is running, and the location of the resource in the file structure of the server. For example, the URL “http://www.apple.com/index.html” specifies the application protocol (“http”), the server host name (“www.apple.com”), and the filename to be retrieved (“index.html”). The host name may be utilized to uniquely identify a network on the internet. For example, the host name “www.apple.com” identifies an Apple network.